/**
 * 任务系统类型定义
 */

import { ItemType } from '../../../shared/face/enums';

/**
 * 任务类型枚举
 */
export enum TaskType {
    // 时间分类任务 (原有)
    每日任务 = '每日任务',
    每周任务 = '每周任务', 
    每月任务 = '每月任务',
    全服任务 = '全服任务',
    限时任务 = '限时任务',
    世界任务 = '世界任务',
    
    // 内容分类任务 (新增兼容)
    击杀 = 'kill_monster',
    收集 = 'collect_item',
    升级 = 'reach_level',
    技能 = 'use_skill',
    副本 = 'complete_dungeon',
    制作 = 'craft_item',
    对话 = 'talk_to_npc',
    探索 = 'explore_area',
    
    // 服务器任务类型 (北子兼容)
    SERVER = '服务器任务',
    WORLD = '世界任务'
}

/**
 * 任务状态枚举
 */
export enum TaskStatus {
    未开始 = 'not_started',
    进行中 = 'in_progress',
    已完成 = 'completed',
    已领取 = 'claimed',
    已过期 = 'expired',
    已失败 = 'failed',
    
    // 英文别名 (兼容)
    NOT_STARTED = 'not_started',
    IN_PROGRESS = 'in_progress', 
    COMPLETED = 'completed',
    CLAIMED = 'claimed',
    EXPIRED = 'expired',
    FAILED = 'failed'
}

/**
 * 任务目标类型枚举
 */
export enum TaskTargetType {
    签到 = '签到',
    获得经验 = '获得经验',
    探索 = '探索',
    击杀怪物 = '击杀怪物'
}

/**
 * 任务目标配置
 */
export interface TaskTarget {
    /** 目标ID (兼容Entity层，可选) */
    id?: string;
    /** 目标类型 */
    type: TaskTargetType;
    /** 目标ID（如怪物ID、道具ID等） */
    targetId?: string;
    /** 目标数量 */
    count: number;
    /** 当前进度 */
    current: number;
    /** 目标描述 */
    description: string;
}

/**
 * 任务奖励配置
 */
export interface TaskReward {
    /** 奖励类型 */
    type: ItemType;
    /** 道具ID */
    id: string;
    /** 数量 */
    count: number;
    /** 奖励名称 */
    name: string;
    /** 奖励描述 (兼容Entity层) */
    description: string;
}

/**
 * 任务配置接口
 */
export interface TaskConfig {
    /** 任务ID */
    id: string;
    /** 任务名称 */
    name: string;
    /** 任务描述 */
    description: string;
    /** 任务类型 */
    type: TaskType;
    /** 任务目标列表 */
    targets: TaskTarget[];
    /** 任务奖励列表 */
    rewards: TaskReward[];
    /** 任务开始时间（限时任务） */
    startTime?: number;
    /** 任务结束时间（限时任务） */
    endTime?: number;
    /** 任务持续时间（分钟，限时任务） */
    duration?: number;
}

/**
 * 玩家任务进度
 */
export interface PlayerTaskProgress {
    /** 任务ID */
    taskId: string;
    /** 任务名称（世界任务专用） */
    name?: string;
    /** 任务描述（世界任务专用） */
    description?: string;
    /** 任务奖励（世界任务专用） */
    rewards?: TaskReward[];
    /** 任务状态 */
    status: TaskStatus;
    /** 目标进度 */
    targets: TaskTarget[];
    /** 开始时间 */
    startTime: number;
    /** 完成时间 */
    completeTime?: number;
    /** 领取时间 */
    claimTime?: number;
    /** 是否已过期 */
    expired: boolean;
}

/**
 * 全服任务进度
 */
export interface ServerTaskProgress {
    /** 任务ID */
    taskId: string;
    /** 全服总进度 */
    totalProgress: number;
    /** 参与玩家数 */
    participantCount: number;
    /** 完成玩家数 */
    completedCount: number;
    /** 最后更新时间 */
    lastUpdateTime: number;
}

/**
 * 任务系统数据
 */
export interface TaskSystemData {
    /** 玩家任务进度 */
    playerTasks: PlayerTaskProgress[];
    /** 全服任务进度 */
    serverTasks: ServerTaskProgress[];
    /** 最后更新时间 */
    lastUpdateTime: number;
}

/**
 * 任务完成事件数据
 */
export interface TaskCompleteEvent {
    /** 任务ID */
    taskId: string;
    /** 玩家ID */
    playerId: string;
    /** 完成时间 */
    completeTime: number;
    /** 获得的奖励 */
    rewards: TaskReward[];
}

/**
 * 排行榜数据
 */
export interface RankingData {
    /** 玩家ID */
    playerId: string;
    /** 玩家名称 */
    playerName: string;
    /** 任务完成数 */
    taskCompleted: number;
    /** 任务积分 */
    taskPoints: number;
    /** 最后更新时间 */
    lastUpdateTime: number;
    /** 排行榜分数（兼容Repository层） */
    score?: number;
    /** 排名（兼容Repository层） */
    rank?: number;
    /** 附加数据（兼容Repository层） */
    data?: any;
} 